package config

import (
	"fmt"
	"io/ioutil"
	"os"

	"gopkg.in/yaml.v3"
)

// Config 应用配置结构
type Config struct {
	IsCapcutEnv   bool   `yaml:"is_capcut_env"`
	DraftDomain   string `yaml:"draft_domain"`
	Port          int    `yaml:"port"`
	PreviewRouter string `yaml:"preview_router"`
	IsUploadDraft bool   `yaml:"is_upload_draft"`
	OssConfig     struct {
		BucketName     string `yaml:"bucket_name"`
		AccessKeyID    string `yaml:"access_key_id"`
		AccessKeySecret string `yaml:"access_key_secret"`
		Endpoint       string `yaml:"endpoint"`
	} `yaml:"oss_config"`
	Mp4OssConfig struct {
		BucketName     string `yaml:"bucket_name"`
		AccessKeyID    string `yaml:"access_key_id"`
		AccessKeySecret string `yaml:"access_key_secret"`
		Region         string `yaml:"region"`
		Endpoint       string `yaml:"endpoint"`
	} `yaml:"mp4_oss_config"`
}

// LoadConfig 从文件加载配置
func LoadConfig(configPath string) (*Config, error) {
	// 默认配置
	config := &Config{
		IsCapcutEnv:   true,
		DraftDomain:   "https://www.install-ai-guider.top",
		Port:          9001,
		PreviewRouter: "/draft/downloader",
		IsUploadDraft: false,
	}

	// 检查配置文件是否存在
	if _, err := os.Stat(configPath); os.IsNotExist(err) {
		return config, fmt.Errorf("配置文件不存在: %s", configPath)
	}

	// 读取配置文件
	data, err := ioutil.ReadFile(configPath)
	if err != nil {
		return config, fmt.Errorf("读取配置文件失败: %v", err)
	}

	// 解析YAML
	if err := yaml.Unmarshal(data, config); err != nil {
		return config, fmt.Errorf("解析配置文件失败: %v", err)
	}

	return config, nil
}
